package portal.dao;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.Query;

import portal.entidades.Articulo;
import portal.entidades.ArticuloElectrodomestico;
import portal.entidades.ArticuloInfantil;
import portal.entidades.ArticuloModa;
import portal.entidades.ArticuloMueble;

@Stateless
public class ArticuloDAOBean extends DAO implements ArticuloDAO {

	public ArticuloDAOBean() {

	}

	@Override
	public List<Articulo> listarArticulos() {
		Query q = getEntityManager().createQuery("from Articulo");
		return (List<Articulo>) q.getResultList();
	}

	@Override
	public List<Articulo> listarArticlosBetSellers() {
		Query q = getEntityManager().createQuery(
				"from Articulo where Ranking IS NOT NULL");
		return (List<Articulo>) q.getResultList();
	}

	@Override
	public Articulo obtener(Long id) {
		return getEntityManager().find(Articulo.class, id);
	}

	@Override
	public void actualizar(Articulo articulo) {
		getEntityManager().merge(articulo);
	}

	@Override
	public List<Articulo> buscarPorCodigo(Long codigoProducto) {
		Query q = getEntityManager().createQuery(
				"from Articulo where idProducto = :idProducto");
		q.setParameter("idProducto", codigoProducto);
		return (List<Articulo>) q.getResultList();
	}

	@Override
	public void blanquearRankings() {
		Query q = getEntityManager().createQuery(
				"UPDATE Articulo set ranking = NULL");
		q.executeUpdate();
	}

	@Override
	public void crearArticuloMueble(ArticuloMueble articulo) {
		getEntityManager().persist(articulo);
	}

	@Override
	public void crearArticuloModa(ArticuloModa articulo) {
		getEntityManager().persist(articulo);
	}

	@Override
	public void crearArticuloElectro(ArticuloElectrodomestico articulo) {
		getEntityManager().persist(articulo);
	}

	@Override
	public void crearArticuloInfantil(ArticuloInfantil articulo) {
		getEntityManager().persist(articulo);
	}

	@Override
	public void actualizarArticuloMueble(ArticuloMueble articulo) {
		getEntityManager().merge(articulo);
	}

	@Override
	public void actualizarArticuloModa(ArticuloModa articulo) {
		getEntityManager().merge(articulo);
	}

	@Override
	public void actualizarArticuloElectro(ArticuloElectrodomestico articulo) {
		getEntityManager().merge(articulo);
	}

	@Override
	public void actualizarArticuloInfantil(ArticuloInfantil articulo) {
		getEntityManager().merge(articulo);
	}

}
